/*
 * Tencent is pleased to support the open source community by making Angel available.
 *
 * Copyright (C) 2017 THL A29 Limited, a Tencent company. All rights reserved.
 *
 *  Licensed under the BSD 3-Clause License (the "License"); you may not use this file except in
 * compliance with the License. You may obtain a copy of the License at
 *
 *  https://opensource.org/licenses/BSD-3-Clause
 *
 *  Unless required by applicable law or agreed to in writing, software distributed under the License
 *  is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
 *  or implied. See the License for the specific language governing permissions and limitations under
 *  the License.
 *
 */

package com.tencent.angel.transport


import io.netty.channel.{Channel, ChannelHandlerContext, ChannelInboundHandlerAdapter}
import org.slf4j.LoggerFactory

class TransportChannelHandler(channel: Channel, val requestMessageHandler: RequestMessageHandler, val responseMessageHandler: ResponseMessageHandler) extends ChannelInboundHandlerAdapter {
  private val LOG = LoggerFactory.getLogger(classOf[TransportChannelHandler])

  @throws[Exception]
  override def channelRead(ctx: ChannelHandlerContext, msg: Any): Unit = {
    msg match {
      case requestMsg: RequestMessage => requestMessageHandler.handler(requestMsg)
      case responseMsg: ResponseMessage => responseMessageHandler.handler(responseMsg)
      case _ => ctx.fireChannelRead(msg)
    }
  }

  override def exceptionCaught(ctx: ChannelHandlerContext, cause: Throwable): Unit = {
    LOG.error("caught exception:", cause.printStackTrace())
    ctx.close
  }
}


